package com.szxy.backend.item.service.impl;

import com.codingapi.txlcn.tc.annotation.LcnTransaction;
import com.szxy.backend.item.feign.CommonItemsFeignClient;
import com.szxy.backend.item.service.ItemService;
import com.szxy.pojo.TbItem;
import com.szxy.pojo.TbItemCat;
import com.szxy.pojo.TbItemDesc;
import com.szxy.pojo.TbItemParamItem;
import com.szxy.utils.IDUtils;
import com.szxy.utils.PageResult;
import com.szxy.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;

/**
 * @Auther:zwer
 * @Date:2019/9/7 15:03
 * @Description:com.szxy.backend.item.service.impl
 * @Version:1.0
 **/
@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private CommonItemsFeignClient commonItemsFeignClient;

    /**
     * 查询商品并返回结果集
     * @param page 当前页
     * @param rows 每页显示的行数
     * @return
     */
    @Override
    public Result selectTbItemAllByPage(Integer page, Integer rows) {
        PageResult pageResult = this.commonItemsFeignClient.selectTbItemAllByPage(page, rows);
        if(pageResult !=null && pageResult.getResult() != null && pageResult.getResult().size() !=0 ){
            return Result.ok(pageResult);
        }
        return Result.error("查无数据");
    }

    /**
     * 查询商品信息
     * @param item 商品数据
     * @param desc
     * @param itemParams
     * @return
     */
    @Override
    @LcnTransaction
    public Result insertTbItem(TbItem item, String desc, String itemParams) {
        Date date = new Date();
        //补齐商品
        long itemId = IDUtils.genItemId();
        item.setId(itemId);
        item.setStatus((byte) 1); //设置商品状态 1表示上架
        item.setCreated(date);
        item.setUpdated(date);
        Integer flagItem = this.commonItemsFeignClient.insertTbItem(item);
        //补齐商品描述
        TbItemDesc itemDesc = new TbItemDesc();
        itemDesc.setItemDesc(desc);
        itemDesc.setCreated(date);
        itemDesc.setUpdated(date);
        itemDesc.setItemId(itemId);
        Integer flagItemDesc = this.commonItemsFeignClient.insertItemDesc(itemDesc);
        //补齐商品规格参数模板
        TbItemParamItem itemParamItem = new TbItemParamItem();
        itemParamItem.setParamData(itemParams);
        itemParamItem.setCreated(date);
        itemParamItem.setUpdated(date);
        itemParamItem.setItemId(itemId);
        Integer flagItemParamItem = this.commonItemsFeignClient.insertTbItemParamItem(itemParamItem);

        // 若插入出现异常，则执行回滚操作，并进行服务降级处理
        if(flagItem == null || flagItemDesc == null || flagItemParamItem == null){
            throw new RuntimeException();
        }

        return Result.ok();
    }

    @Override
    @LcnTransaction
    public Result deleteItemById(Long itemId) {
        TbItem item = new TbItem();
        item.setId(itemId);
        item.setStatus((byte) 3);// 3 表示商品下架
        Integer flag = this.commonItemsFeignClient.updateItemById(item);
        if(flag == 0){
            throw new RuntimeException();
        }
        return Result.ok("商品下架成功");
    }

    @Override
    @LcnTransaction
    public Result updateTbItem(TbItem item, String desc, String itemParams) {
        Long itemId = item.getId(); //获取商品 ID
        //更新商品信息
        Integer itemFlag = this.commonItemsFeignClient.updateItemById(item);
        //创建商品描述对象
        TbItemDesc itemDesc = new TbItemDesc();
        itemDesc.setItemDesc(desc);
        itemDesc.setItemId(itemId);
        //更新商品描述信息
        int itemDescFlag = this.commonItemsFeignClient.updateItemDescByItemId(itemDesc);
        //创建商品规格参数对象
        TbItemParamItem itemParamItem = new TbItemParamItem();
        itemParamItem.setParamData(itemParams);
        itemParamItem.setItemId(itemId);
        //更新商品规格参数信息
        this.commonItemsFeignClient.updateItemParamItemByItemId(itemParamItem);
        return Result.ok();
    }

    @Override
    public Result preUpdateItem(Long itemId) {
        try {
            TbItemDesc itemDesc = this.commonItemsFeignClient.findItemDescByItemId(itemId);
            TbItemParamItem itemParamItem = this.commonItemsFeignClient.findItemParamItemByItemId(itemId);
            TbItem item = this.commonItemsFeignClient.findItemById(itemId);
            TbItemCat itemCat = null;
            if(item != null){
                itemCat = this.commonItemsFeignClient.findItemCatByItemId(item.getCid());
            }
            HashMap<String, Object> dataMap = new HashMap<>();
            dataMap.put("itemCat",itemCat.getName());
            dataMap.put("item",item);
            dataMap.put("itemDesc",itemDesc.getItemDesc());
            dataMap.put("itemParamItem",itemParamItem);
            return Result.ok(dataMap);
        }catch (Exception e){
            e.printStackTrace();
        }
        return Result.error("预更新失败");
    }
}
